package com.sqlcheck.service;

import com.sqlcheck.dto.ai.RuleVerificationRequest;
import com.sqlcheck.dto.ai.RuleVerificationResponse;
import com.sqlcheck.entity.ScanResult;

import java.util.List;

/**
 * AI增强验证服务接口
 * 负责使用AI对规则分析结果进行二次验证和增强
 * 
 * @author Claude
 * @version v1.0
 * @since 2025-01-09
 */
public interface AIEnhancementService {

    /**
     * 对规则分析结果进行AI增强验证
     * 这是主要的入口方法，负责完整的AI增强验证流程
     * 
     * @param taskId 任务ID
     * @param ruleResults 规则分析结果列表
     * @return AI增强验证后的结果列表
     */
    List<ScanResult> verifyRuleResults(Long taskId, List<ScanResult> ruleResults);
    
    /**
     * 对规则分析结果进行AI增强验证（支持进度回调）
     * 这是主要的入口方法，负责完整的AI增强验证流程
     * 
     * @param taskId 任务ID
     * @param ruleResults 规则分析结果列表
     * @param progressCallback 进度回调接口，用于实时更新AI验证进度
     * @return AI增强验证后的结果列表
     */
    List<ScanResult> verifyRuleResults(Long taskId, List<ScanResult> ruleResults, ProgressCallback progressCallback);

    /**
     * 构建AI增强验证请求
     * 将规则分析结果和相关SQL信息打包成AI可理解的格式
     * 
     * @param taskId 任务ID
     * @param ruleResults 规则分析结果
     * @return AI增强验证请求对象
     */
    RuleVerificationRequest buildVerificationRequest(Long taskId, List<ScanResult> ruleResults);

    /**
     * 处理AI增强验证响应
     * 解析AI的验证结果并更新scan_results表
     * 
     * @param request 原始验证请求
     * @param aiResponse AI响应结果
     * @return 更新后的扫描结果
     */
    List<ScanResult> processVerificationResponse(RuleVerificationRequest request, RuleVerificationResponse aiResponse);

    /**
     * 检查任务是否需要AI增强验证
     * 
     * @param taskId 任务ID
     * @return 是否需要AI增强验证
     */
    boolean shouldEnableAiVerification(Long taskId);

    /**
     * 批量增强验证规则结果（使用默认批次大小）
     * 针对大量SQL语句的批量处理，支持智能分批和容错
     * 
     * @param taskId 任务ID
     */
    void batchVerifyRuleResults(Long taskId);

    /**
     * 批量增强验证规则结果
     * 针对大量SQL语句的批量处理，支持智能分批和容错
     * 
     * @param taskId 任务ID
     * @param batchSize 批处理大小
     */
    void batchVerifyRuleResults(Long taskId, int batchSize);

    /**
     * 获取AI增强验证统计信息
     * 
     * @param taskId 任务ID
     * @return 增强验证统计结果
     */
    AiVerificationStats getVerificationStats(Long taskId);

    /**
     * AI验证统计信息
     */
    interface AiVerificationStats {
        int getTotalRuleIssues();
        int getAiVerifiedCount();
        int getAiConfirmedCount();
        int getAiRejectedCount();
        double getAverageConfidence();
        int getHighConfidenceCount();
        int getLowConfidenceCount();
    }
}